package org.example.me.handler;

import lombok.extern.slf4j.Slf4j;
import org.example.me.enums.ExcelTypeEnum;
import org.example.me.handler.template.AbstractCommonExportTemplate;
import org.example.me.handler.context.ExcelContextExtend;
import org.example.me.dao.DataGenerator;
import org.example.me.model.Order;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 订单数据Excel导出处理器
 * 负责将订单数据导出为Excel文件，支持大数据量分批处理
 */
@Slf4j
@Component
public class OrderExportHandler extends AbstractCommonExportTemplate {

    /**
     * 获取处理器对应的Excel类型
     * @return Excel类型枚举值
     */
    @Override
    public ExcelTypeEnum getExcelType() {
        return ExcelTypeEnum.ORDER;
    }

    /**
     * 导出订单数据到Excel文件
     * @param excelContext Excel上下文信息
     */
    @Override
    protected void export(ExcelContextExtend excelContext) {
        // 可以分批次获取数据然后调用 writeData
        // writeData 方法会自动判断是否达到最大行数，达到最大行数会自动写入Excel文件并刷新缓冲区
        List<Order> ordersList = DataGenerator.generateOrderData();
        for (Order order : ordersList) {
            List<Order> orders = new ArrayList<>();
            orders.add(order);
            doWriteData(excelContext, orders, Order.class);
        }
    }
}